/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Reportes.HoraExtra;
import Reportes.Rentabilidad;
import Principals.Main;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import org.hibernate.Query;

/**
 *
 * @author CARLOS
 */
public class RentabilidadDAO {
     public static List<Rentabilidad> buscarRentabilidad(Date fechaInicio,Date fechaFin) {
        String q = "select en.fecha_salida,en.id_envio_pedido,em.nombres || ' ' || em.apellido_paterno \"empleado\", cast   (count(pr.id_producto) as Integer) \"cantidad\" , \n" +
"cast( sum(pr.precio_lista-pr.precio_costo) as float) \"ganancia\" ,cast( ( sum(pr.precio_lista-pr.precio_costo) -en.utilidad  ) as float) \"penalidad\" ,cast(en.utilidad as float) , en.estado from envio_pedido en\n" +
"inner join pedido pe on en.id_envio_pedido=pe.id_envio_pedido\n" +
"inner join producto pr on pe.id_producto=pr.id_producto\n" +
"inner join empleado em on em.id_empleado=en.id_empleado\n" +
"where fecha_salida between date_trunc('day', cast(:fechaInicio as timestamp))  and date_trunc('day', cast(:fechaFin  as timestamp))\n" +
"\n" +
"group by \n" +
"en.fecha_salida,en.id_envio_pedido,em.nombres || ' ' || em.apellido_paterno , en.estado,en.utilidad\n" +
"order by fecha_salida desc";
        
      
     Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createSQLQuery(q);
/*fechaIncio.setHours(0);
fechaInicio.setMinutes(0);
fechaInicio.setSeconds(0);
fechaInicio.set
fechaFin.setHours(0);
fechaFin.setMinutes(0);
fechaFin.setSeconds(0);
*/

       query.setParameter("fechaInicio", fechaInicio);
          query.setParameter("fechaFin", fechaFin);

        Main.usrSesion.session.getTransaction().commit();
        List<Object[]> b = query.list();

        List<Rentabilidad> a = new LinkedList<Rentabilidad>();
Rentabilidad h = null;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-ddHHmmss");
int id,cantidad,estado;
           String empleado;
           float gan,pen,uti;
String _estado="";
        for (Object[] o : b) {
       try{
            Date fecha=new Date();
            
            fecha= (Date) o[0];
            
            
            
            id= (Integer) o[1];
           empleado=(String)o[2]            ;
           cantidad=(Integer) o[3];
           gan=((Double)o[4]).floatValue();
           pen=((Double)o[5]).floatValue();
           uti=((Double)o[6]).floatValue();
            estado=(Integer)o[7];
           
            if (estado==1){
                 _estado="En ruta";
            }else{
                 _estado="Finalizado";
            }
            h=new Rentabilidad(fecha,empleado,id,cantidad,gan,pen,uti,_estado);
            a.add(h);
            
       }catch(Exception ddd){}
        }



        return a;
    }
}
